package done.normal_001_100;

import com.study.common.ListNode;
import org.junit.Test;

import static com.study.util.LogUtil.info;

/**
 * 92. Reverse Linked List II. 反转链表
 * <p>
 * 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
 * 说明:
 * 1 ≤ m ≤ n ≤ 链表长度。
 * 示例:
 * 输入: 1 -> 2 -> 3 -> 4 -> 5 -> NULL, m = 2, n = 4
 * 输出: 1 -> 4 -> 3 -> 2 -> 5 -> NULL
 * <p>
 * 2019-05-04 07:59
 **/
@SuppressWarnings("all")
public class ReverseLinkedListII {

    public ListNode reverseBetween(ListNode head, int m, int n) {
        // 190506 first
        // 190507 second 看答案才做出来
        // 190510 third 没做出来 看了答案
        // 190528 fourth 看了答案做出来的，没真正理解
        // 190529 fifth 做出来了
        // 190530 一遍过
        // 190531 没看答案，调了一下，两遍过
        // 190601 一遍过
        // 190605 没看答案一遍过
        // 190617 一遍过
        return null;
    }

    @Test
    public void test() {
        ListNode root = new ListNode(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
        info(reverseBetween(root, 5, 10));
    }
}





































/*
public ListNode reverseBetween(ListNode head, int m, int n) {
    ListNode result = new ListNode(0);
    result.next = head;
    ListNode cur = head;
    ListNode pre = result;

    for (int i = 1; i < m; i++) {
        pre = pre.next;
        cur = cur.next;
    }

    for (int i = m; i < n; i++) {
        ListNode tempNode = cur.next;
        cur.next = cur.next.next;
        tempNode.next = pre.next;
        pre.next = tempNode;
    }
    return result.next;
}
*/
